package com.ktg.mes.md.controller;

import java.util.List;
import javax.servlet.http.HttpServletResponse;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ktg.mes.md.domain.MdProductStatisticsBom;
import com.ktg.mes.md.domain.MdStatisticsBom;
import com.ktg.mes.md.domain.MdStatisticsTypeBom;
import com.ktg.mes.md.service.*;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ktg.common.annotation.Log;
import com.ktg.common.core.controller.BaseController;
import com.ktg.common.core.domain.AjaxResult;
import com.ktg.common.enums.BusinessType;
import com.ktg.mes.md.domain.MdProductBom;
import com.ktg.mes.md.service.IMdProductBomService;
import com.ktg.common.utils.poi.ExcelUtil;
import com.ktg.common.core.page.TableDataInfo;

/**
 * 产品BOM关系Controller
 *
 * @author yinjinlu
 * @date 2022-05-09
 */
@RestController
@RequestMapping("/mes/md/bom")
public class MdProductBomController extends BaseController
{
    @Autowired
    private IMdProductBomService mdProductBomService;

    @Autowired
    private IMdStatisticsBomService mdStatisticsBomService;

    @Autowired
    private IMdStatisticsTypeBomService mdStatisticsTypeBomService;

    @Autowired
    private IMdProductStatisticsBomService productStatisticsBomService;

    /**
     * 查询产品BOM关系列表
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:list')")
    @GetMapping("/list")
    public TableDataInfo list(MdProductBom mdProductBom)
    {
        startPage();
        List<MdProductBom> list = mdProductBomService.selectMdProductBomList(mdProductBom);
        return getDataTable(list);
    }

    /**
     * 查询产品BOM关系列表
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:list')")
    @GetMapping("/change")
    public AjaxResult change(MdProductBom mdProductBom)
    {
        try {
            //根据mes分类 删除产品BOM 旧数据，
//            List<MdProductBom> list = mdProductBomService.selectMdProductBomList(mdProductBom);
//            if (list != null && list.size()>0 ){
//                Long[] ids = new Long[list.size()];
//                for (int i = 0; i < list.size(); i++) {
//                    ids[i] = Long.parseLong(String.valueOf(list.get(i).getBomId()));
//                }
//                mdProductBomService.deleteMdProductBomByBomIds(ids);
//            }
//            MdStatisticsBom lqw=new MdStatisticsBom();
//            lqw.setItemId(mdProductBom.getAttr3());
//            List<MdStatisticsBom> lists = mdStatisticsBomService.selectMdStatisticsBomList(lqw);
//            for (int i = 0; i < lists.size(); i++) {
//                MdProductBom productBom=new MdProductBom();
//                productBom.setItemId(mdProductBom.getItemId());
//                productBom.setAttr1(lists.get(i).getAttr1());
//                productBom.setItemOrProduct(lists.get(i).getItemOrProduct());
//                productBom.setBomItemId(lists.get(i).getBomItemId());
//                productBom.setAttr2(lists.get(i).getAttr2());
//                productBom.setAttr3(lists.get(i).getAttr3());
//                productBom.setAttr4(lists.get(i).getAttr4());
//                productBom.setAutoId(lists.get(i).getAutoId());
//                productBom.setBomItemCode(lists.get(i).getBomItemCode());
//                productBom.setBomItemName(lists.get(i).getBomItemName());
//                productBom.setBomItemSpec(lists.get(i).getBomItemSpec());
//                productBom.setEnableFlag(lists.get(i).getEnableFlag());
//                productBom.setPubufts(lists.get(i).getPubufts());
//                productBom.setQuantity(lists.get(i).getQuantity());
//                productBom.setUnitOfMeasure(lists.get(i).getUnitOfMeasure());
//                productBom.setRemark(lists.get(i).getRemark());
//                mdProductBomService.insertMdProductBom(productBom);
//            }

            //根据mes分类 删除MES分类BOM 旧数据
            QueryWrapper<MdProductStatisticsBom> productDeleteStatisticsQueryWrapper = new QueryWrapper<MdProductStatisticsBom>();
            productDeleteStatisticsQueryWrapper.eq("item_id",mdProductBom.getItemId());
            productDeleteStatisticsQueryWrapper.ge("bom_parent_id",1);
            productStatisticsBomService.remove(productDeleteStatisticsQueryWrapper);

            QueryWrapper<MdStatisticsTypeBom> statisticsTypeBomQueryWrapper = new QueryWrapper<MdStatisticsTypeBom>();
            statisticsTypeBomQueryWrapper.eq("parent_id",mdProductBom.getAttr3());
            List<MdStatisticsTypeBom> typeBomList = mdStatisticsTypeBomService.list(statisticsTypeBomQueryWrapper);

            for (int i = 0; i < typeBomList.size(); i++) {
                MdStatisticsTypeBom typeBom = typeBomList.get(i);
                MdProductStatisticsBom statisticsBom=new MdProductStatisticsBom();
                statisticsBom.setItemId(mdProductBom.getItemId());
                statisticsBom.setBomParentId(typeBom.getParentId());
                statisticsBom.setStatisticsId(typeBom.getStatisticsId());
                statisticsBom.setStatisticsName(typeBom.getStatisticsName());
                statisticsBom.setQuantity(typeBom.getQuantity());
                statisticsBom.setRemark(typeBom.getRemark());
                productStatisticsBomService.save(statisticsBom);
            }

            return   AjaxResult.success(true);
        } catch (Exception e) {
            e.printStackTrace();
            return  AjaxResult.error("更新BOM物料失败！");
        }
    }


    /**
     * 查询产品BOM关系列表
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:list')")
    @GetMapping("/alllist")
    public TableDataInfo alllist(MdProductBom mdProductBom)
    {
        startPage();
        List<MdProductBom> list = mdProductBomService.selectMdProductBomList(mdProductBom);
        return getDataTable(list);
    }

    /**
     * 导出产品BOM关系列表
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:export')")
    @Log(title = "产品BOM关系", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, MdProductBom mdProductBom)
    {
        List<MdProductBom> list = mdProductBomService.selectMdProductBomList(mdProductBom);
        ExcelUtil<MdProductBom> util = new ExcelUtil<MdProductBom>(MdProductBom.class);
        util.exportExcel(response, list, "产品BOM关系数据");
    }

    /**
     * 获取产品BOM关系详细信息
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:query')")
    @GetMapping(value = "/{bomId}")
    public AjaxResult getInfo(@PathVariable("bomId") Long bomId)
    {
        return AjaxResult.success(mdProductBomService.selectMdProductBomByBomId(bomId));
    }

    /**
     * 新增产品BOM关系
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:add')")
    @Log(title = "产品BOM关系", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody MdProductBom mdProductBom)
    {
        return toAjax(mdProductBomService.insertMdProductBom(mdProductBom));
    }

    /**
     * 修改产品BOM关系
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:edit')")
    @Log(title = "产品BOM关系", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody MdProductBom mdProductBom)
    {
        return toAjax(mdProductBomService.updateMdProductBom(mdProductBom));
    }

    /**
     * 删除产品BOM关系
     */
    @PreAuthorize("@ss.hasPermi('mes:md:bom:remove')")
    @Log(title = "产品BOM关系", businessType = BusinessType.DELETE)
	@DeleteMapping("/{bomIds}")
    public AjaxResult remove(@PathVariable Long[] bomIds)
    {
        return toAjax(mdProductBomService.deleteMdProductBomByBomIds(bomIds));
    }
}
